package com.shrct.businessprocess.purchase;

import com.shrct.businessprocess.organization.RCSupplier;
import com.shrct.businessprocess.product.RCIdentifiablePhysicalProductEntry;
import com.shrct.businessprocess.product.RCServiceLevel;
import com.shrct.businessprocess.product.RCServiceResponseTime;
import com.shrct.businessprocess.project.RCProjectMoney;
import com.shrct.businessprocess.purchase.ICanAcceptProductService;
import com.shrct.businessprocess.purchase.RCBasePurchaseOrderAccept;
import com.shrct.businessprocess.purchase.RCServiceAcceptItem;
import com.shrct.businessprocess.purchase.RCServicePurchaseOrder;
import com.shrct.businessprocess.purchase.impl.RCServicePurchaseOrderAcceptImpl;
import com.shrct.businessprocess.purchase.proxy.RCServicePurchaseOrderAcceptProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCServicePurchaseOrderAcceptImpl.class)
public interface RCServicePurchaseOrderAccept extends RCBasePurchaseOrderAccept, ICanAcceptProductService {
  public abstract RCServicePurchaseOrder getPurchaseOrder();
  
  public abstract RCServicePurchaseOrderAccept setPurchaseOrder(final RCServicePurchaseOrder purchaseOrder);
  
  public abstract Collection<RCServiceAcceptItem> getAcceptItem();
  
  public abstract RCServiceAcceptItem createAndAddtoAcceptItem();
  
  public abstract RCServiceAcceptItem createAndAddtoAcceptItem(final Procedure1<RCServiceAcceptItem> updater);
  
  public abstract RCServicePurchaseOrderAccept removeFromAcceptItem(final RCServiceAcceptItem rCServiceAcceptItem);
  
  public abstract RCServicePurchaseOrderAccept removeAllAcceptItem();
  
  /**
   * 到货总金额
   */
  public abstract RCProjectMoney getTotalAmount();
  
  public abstract void acceptProductService(final String name, final String serviceSpec, final String serviceContractCode, final RCSupplier productSupplier, final RCIdentifiablePhysicalProductEntry product, final RCServiceLevel serviceLevel, final RCServiceResponseTime serviceResponseTime, final Date startDate, final Date dueDate, final RCProjectMoney price, final Boolean forPartDevice);
  
  public abstract RCServicePurchaseOrderAcceptProxy toProxy();
}
